#pragma once

#include "ColligereDatabaseItemBase.hpp"
#include "ColligereDatabaseHandlerBase.hpp"
#include "ColligereDatabaseTreeCtrlBase.hpp"

namespace col {

//! An abstract base class for a database layout.
class DatabaseLayoutBase : public wxPanel
{
public:
	DatabaseLayoutBase ( wxWindow *pLayoutParent );
	DatabaseLayoutBase() { }

	virtual ~DatabaseLayoutBase();

	virtual void Create() = 0;
	virtual void Close() = 0;
	
	virtual bool IsDatabaseItemListShown() const = 0;
	virtual bool IsRecycleBinShown() const = 0;

	virtual void ShowRecycleBin ( bool show = true ) = 0;
	virtual void ShowDatabaseItems ( bool show = true ) = 0;
	
	virtual const wxString GetStatusText ( wxUint32 statBarColumn ) const = 0;
	virtual const wxString GetTitleText() const = 0;
	
	virtual void PassItemToInputControls ( const DatabaseItemBase &rItem );
	virtual const DatabaseItemBase &GetItemFromInputControls() = 0;
	
	virtual void SelectItem ( const DatabaseItemBase &rItem, bool select ) = 0;

	virtual const TreeItemData *GetSelectedItemData() const = 0; 
	
	virtual void UnselectActiveItem() = 0;

	virtual void ClearInputControls();

	virtual const DatabaseItemBase &GetPrevParsedItem() const = 0;

//public:
	DECLARE_ABSTRACT_CLASS ( DatabaseLayoutBase );
};

}